#ifndef __RTC_H_
#define __RTC_H_

/* =========================== 用户配置 =========================== */

#include "main.h"

static inline void RTC_SET_COUNTER(uint32_t cnt)
{
    RTC->CRL |= (1 << 4);
    RTC->CNTL = (cnt) & 0xFFFF;
    RTC->CNTH = ((cnt) >> 16) & 0xFFFF;
    RTC->CRL &= ~(1 << 4);
    while (!(RTC->CRL & (1 << 5)))
        ;
}

static inline uint32_t RTC_GET_COUNTER(void)
{
    return ((RTC->CNTH << 16) | RTC->CNTL);
}

/* =========================== 外部声明 =========================== */

#include "stdint.h"

// 日历结构体
typedef struct
{
    uint16_t year;
    uint8_t month;
    uint8_t day;
    uint8_t week;
    uint8_t hour;
    uint8_t min;
    uint8_t sec;
} rtc_time_t;

extern rtc_time_t rtc_time;

/**
 * @brief   RTC 初始化
 * @param   updata: 是否更新时间（1: 是, 0: 否）
 * @retval  无
 */
void rtc_init(uint8_t updata);

/**
 * @brief   设置时间
 * @param   time: 时间结构体
 * @retval  无
 */
void rtc_set_time(const rtc_time_t *time);

/**
 * @brief   获取时间
 * @param   time: 时间结构体指针
 * @retval  无
 */
void rtc_get_time(rtc_time_t *time);

#endif
